package com.xhl.gateway.config;

import com.alibaba.cloud.nacos.NacosConfigManager;
import com.alibaba.nacos.api.config.listener.AbstractListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Map;
import java.util.Set;

/**
 * @Description 监听器，用于监听 nacos 上配置文件的变化
 * @Author xhl
 * @Date 2022/12/26 13:54
 **/

@Component
public class NacosConfigListener {

    @Autowired
    private NacosConfigManager nacosConfigManager;

    // 通过依赖注入，获取 AbstractNacosConfig 的全部实现及 bean 名称
    @Autowired
    private Map<String, AbstractNacosConfig> nacosConfigMap;

    // 在该类的初始化方法中，完成监听器的注册逻辑
    @PostConstruct
    public void init() throws Exception {

        Set<String> dataIds = nacosConfigMap.keySet();
        // 遍历集合，为每个需要监听的文件设置监听器
        for (String dataId : dataIds) {

            AbstractNacosConfig abstractNacosConfig = nacosConfigMap.get(dataId);

            String content = nacosConfigManager.getConfigService().getConfigAndSignListener(dataId, abstractNacosConfig.getGroup(), 3000,
                    new AbstractListener() {
                        @Override
                        public void receiveConfigInfo(String configInfo) {
                            // 配置变更后，调用 onReceived 方法
                            abstractNacosConfig.onReceived(configInfo);
                        }
                    });
            if (content != null) {
                abstractNacosConfig.onReceived(content);
            }

        }



    }

}